6867
4396
Recientemente, ejecuté parte de mi código JavaScript a través de JSLint de Crockford y me dio el siguiente error:
Problema en la línea 1, carácter 1: Falta la declaración "use estricto".
Al hacer algunas búsquedas, me di cuenta de que algunas personas agregan "use estricto"; en su código JavaScript. Una vez que agregué la declaración, el error dejó de aparecer. Desafortunadamente, Google no reveló gran parte de la historia detrás de esta declaración de cadena. Ciertamente debe tener algo que ver con la forma en que el navegador interpreta JavaScript, pero no tengo idea de cuál sería el efecto.
Entonces, ¿qué es "uso estricto"; todo, ¿qué implica y sigue siendo relevante?
¿Alguno de los navegadores actuales responde al "uso estricto"? cadena o es para uso futuro? 
Este artículo sobre el modo estricto de Javascript puede interesarle: John Resig - Modo estricto de ECMAScript 5, JSON y más
Para citar algunas partes interesantes:
El modo estricto es una nueva característica de ECMAScript 5 que le permite colocar un programa, o una función, en un contexto operativo "estricto". Este contexto estricto evita que se tomen determinadas acciones y genera más excepciones.
Y:
El modo estricto ayuda de dos maneras:
Detecta algunos errores comunes de codificación, lanzando excepciones.
Previene, o arroja errores, cuando se toman acciones relativamente "inseguras" (como obtener acceso al objeto global).
Desactiva funciones confusas o mal pensadas.
También tenga en cuenta que puede aplicar el "modo estricto" a todo el archivo ... O puede usarlo solo para una función específica (aún citando el artículo de John Resig):
// Código no estricto ...
(función(){
"uso estricto";
// Defina su biblioteca estrictamente ...
}) ();
// Código no estricto ...
Lo que podría ser útil si tiene que mezclar código antiguo y nuevo ;-)
Entonces, supongo que es un poco como el "uso estricto" que puedes usar en Perl (¿de ahí el nombre?): Te ayuda a cometer menos errores, al detectar más cosas que podrían conducir a roturas.
El modo estricto ahora es compatible con todos los navegadores principales.
Dentro de los módulos nativos ECMAScript (con declaraciones de importación y exportación) y las clases ES6, el modo estricto siempre está habilitado y no se puede deshabilitar.
|
Es una nueva característica de ECMAScript 5. John Resig escribió un buen resumen de la misma.
Es solo una cadena que pones en tus archivos JavaScript (ya sea en la parte superior de tu archivo o dentro de una función) que se ve así:
"uso estricto";
Ponerlo en su código ahora no debería causar ningún problema con los navegadores actuales, ya que es solo una cadena. Puede causar problemas con su código en el futuro si su código viola el pragma. Por ejemplo, si actualmente tiene foo = "bar" sin definir primero foo, su código comenzará a fallar ... lo cual es algo bueno en mi opinión.
|
La declaración "use estricto"; indica al navegador que utilice el modo estricto, que es un conjunto de funciones de JavaScript reducido y más seguro.
Lista de características (no exhaustiva)
No permite variables globales. (Detecta declaraciones de var que faltan y errores tipográficos en nombres de variables)
Las asignaciones fallidas silenciosas arrojarán error en modo estricto (asignando NaN = 5;)
Los intentos de eliminar propiedades no eliminables arrojarán (eliminar Object.prototype)
Requiere que todos los nombres de propiedad en un objeto literal sean únicos (var x = {x1: "1", x1: "2"})
Los nombres de los parámetros de función deben ser únicos (función suma (x, x) {...})
Prohíbe la sintaxis octal (var x = 023; algunos desarrolladores asumen erróneamente que un cero precedente no hace nada para cambiar el número).
Prohíbe la palabra clave with
eval en modo estricto no introduce nuevas variables
Prohíbe eliminar nombres simples (eliminar x;)
Prohíbe la vinculación o asignación de los nombres eval y argumentos en cualquier forma
El modo estricto no alias las propiedades del objeto de argumentos con los parámetros formales. (es decir, en la función sum (a, b) {devolver argumentos [0] + b;} Esto funciona porque los argumentos [0] están vinculados a ay así sucesivamente.)
argumentos.callee no es compatible
[Ref: modo estricto, Mozilla Developer Network]
|
Si las personas están preocupadas por usar el uso estricto, podría valer la pena consultar este artículo:
Compatibilidad con ECMAScript 5 'Modo estricto' en navegadores. ¿Qué significa esto? NovoGeek.com - el weblog de Krishna
Habla sobre la compatibilidad con el navegador, pero lo que es más importante, cómo lidiar con él de forma segura:
function isStrictMode () {
vuelve! esto;
}
/ *
devuelve falso, ya que 'esto' se refiere al objeto global y
'! esto' se vuelve falso
* /
function isStrictMode () {
"uso estricto";
vuelve! esto;
}
/ *
devuelve verdadero, ya que en modo estricto la palabra clave 'esto'
no se refiere a un objeto global, a diferencia de JS tradicional.
Entonces, aquí, 'esto' es 'indefinido' y '! Esto' se vuelve cierto.
* /
|
Una palabra de advertencia, todos los programadores que se esfuerzan mucho: aplicar "use estricto" al código existente puede ser peligroso. Esta cosa no es una pegatina de cara feliz que te haga sentir bien y que puedas pegarle al código para hacerlo "mejor". Con el pragma de "usar estricto", el navegador lanzará repentinamente excepciones en lugares aleatorios que nunca antes arrojó solo porque en ese lugar estás haciendo algo que JavaScript por defecto / suelto felizmente permite pero que el JavaScript estricto aborrece. Es posible que tenga infracciones de rigurosidad escondidas en llamadas poco utilizadas en su código que solo generarán una excepción cuando finalmente se ejecuten, por ejemplo, en el entorno de producción que usan sus clientes de pago.
Si va a dar el paso, es una buena idea aplicar el "uso estricto" junto con pruebas unitarias completas y una tarea de compilación JSHint estrictamente configurada que le dará cierta confianza en que no hay un rincón oscuro de su módulo que explote. horriblemente solo porque has activado el modo estricto. O bien, aquí hay otra opción: simplemente no agregue "use estricto" a ninguno de sus códigos heredados, probablemente sea más seguro de esa manera, honestamente. DEFINITIVAMENTE NO agregue "use estricto" a ningún módulo que no sea de su propiedad omantener, como módulos de terceros.
Creo que a pesar de que es un animal enjaulado mortal, el "uso estricto" puede ser algo bueno, pero hay que hacerlo bien. El mejor momento para ser estricto es cuando su proyecto es totalmente nuevo y comienza desde cero. Configure JSHint / JSLint con todas las advertencias y opciones ajustadas tan estrictamente como su equipo pueda soportar, obtenga un buen sistema de compilación / prueba / afirmación del día preparado como Grunt + Karma + Chai, y solo ENTONCES comience a marcar todos sus nuevos módulos como " utilizar estricto ". Esté preparado para solucionar muchos errores y advertencias molestos. Asegúrese de que todos comprendan la gravedad configurando la compilación en FAIL si JSHint / JSLint produce alguna infracción.
Mi proyecto no era un proyecto nuevo cuando adopté el "uso estricto". Como resultado, mi IDE está lleno de marcas rojas porque no tengo "uso estricto" en la mitad de mis módulos, y JSHint se queja de eso. Es un recordatorio para mí sobre qué refactorización debería hacer en el futuro. Mi objetivo es estar libre de marcas rojas debido a todas mis declaraciones de "uso estricto" que faltan, pero eso es dentro de años.
|
Usando 'use estricto'; no mejora repentinamente su código.
El modo estricto de JavaScript es una característica de ECMAScript 5. Puede habilitar el modo estricto declarando esto en la parte superior de su script / función.
'uso estricto';
Cuando un motor de JavaScript ve esta directiva, comenzará a interpretar el código en un modo especial. En este modo, se producen errores cuando se detectan ciertas prácticas de codificación que podrían terminar siendo posibles errores (que es el razonamiento detrás del modo estricto).
Considere este ejemplo:
var a = 365;
var b = 030;
En su obsesión por alinear los literales numéricos, el desarrollador ha inicializado inadvertidamente la variable b con un literal octal. El modo no estricto interpretará esto como un literal numérico con valor 24 (en base 10). Sin embargo, el modo estricto arrojará un error.
Para obtener una lista no exhaustiva de especialidades en modo estricto, consulte esta respuesta.
¿Dónde debería usar 'use estricto' ;?
En mi nueva aplicación JavaScript: ¡Por supuesto! El modo estricto se puede usar como denunciante cuando está haciendo algo estúpido con su código.
En mi código JavaScript existente: ¡Probablemente no! Si su código JavaScript existente tiene declaraciones que están prohibidas en modo estricto, la aplicación simplemente se romperá. Si desea el modo estricto, debe estar preparado para depurar y corregir su código existente. Esta es la razón por la que se usa 'use estricto'; no mejora repentinamente su código.
¿Cómo utilizo el modo estricto?
Inserte un 'uso estricto'; declaración en la parte superior de su guión:
// Archivo: myscript.js
'uso estricto';
var a = 2;
....
Tenga en cuenta que todo el archivo myscript.js se interpretará en modo estricto.
O inserte un 'uso estricto'; declaración en la parte superior de su cuerpo de función:
function doSomething () {
'uso estricto';
...
}
Todo lo que esté en el alcance léxico de la función doSomething se interpretará en modo estricto. La palabra alcance léxico es importante aquí. Por ejemplo, si su código estricto llama a una función de una biblioteca que no es estricta, solo su código se ejecuta en modo estricto y no la función llamada. Vea esta respuesta para una mejor explicación.
¿Qué cosas están prohibidas en modo estricto?
Encontré un buen artículo que describe varias cosas que están prohibidas en modo estricto (tenga en cuenta que esta no es una lista exclusiva):
Alcance
Históricamente, JavaScript se ha confundido acerca de cómo funciona
tienen alcance. A veces parecen tener un alcance estático, pero algunos
las características hacen que se comporten como si tuvieran un alcance dinámico. Esto es
confuso, lo que dificulta la lectura y la comprensión de los programas.
El malentendido provoca errores. También es un problema de rendimiento.
El alcance estático permitiría que se produzca el enlace de variables en la compilación
tiempo, pero el requisito de alcance dinámico significa que el enlace debe ser
diferido al tiempo de ejecución, que viene con un rendimiento significativo
multa.
El modo estricto requiere que toda la vinculación de variables se realice de forma estática.
Eso significa que las características que antes requerían un enlace dinámico
debe ser eliminado o modificado. Específicamente, la declaración with es
eliminado, y la capacidad de la función eval para alterar el
El entorno de quien llama está severamente restringido.
Uno de los beneficios del código estricto es que herramientas como YUI Compressor
puede hacer un mejor trabajo al procesarlo.
Variables globales implícitas
JavaScript tiene variables globales implícitas. Si
no declaras explícitamente una variable, una variable global es
declarado implícitamente para usted. Esto facilita la programación para
principiantes porque pueden descuidar algunas de sus tareas domésticas básicas
quehaceres. Pero hace que la gestión de programas más grandes sea mucho más
difícil y degrada significativamente la fiabilidad. Tan en estricto
modo, las variables globales implícitas ya no se crean. Debieras
declare explícitamente todas sus variables.
Fuga global
Hay una serie de situaciones que pueden causar este
estar vinculado al objeto global. Por ejemplo, si te olvidas de
proporcionar el nuevo prefijo al llamar a un constructorfunción, la
esto del constructor se vinculará inesperadamente al objeto global, por lo que
en lugar de inicializar un nuevo objeto, será silenciosamente
manipulación de variables globales. En estas situaciones, el modo estricto
en su lugar, vincula esto a undefined, lo que hará que el constructor
lanzar una excepción en su lugar, permitiendo que el error se detecte mucho
cuanto antes.
Falla ruidosa
JavaScript siempre ha tenido propiedades de solo lectura, pero
no podría crearlos usted mismo hasta que el Object.createProperty de ES5
función expuso esa capacidad. Si intentó asignar un valor
a una propiedad de solo lectura, fallaría silenciosamente. La asignación sería
no cambiar el valor de la propiedad, pero su programa procedería como
aunque lo había hecho. Este es un peligro para la integridad que puede hacer que los programas
entrar en un estado inconsistente. En modo estricto, intentar cambiar un
La propiedad de solo lectura lanzará una excepción.
Octal
La representación octal (o base 8) de los números era extremadamente
útil cuando se hace programación a nivel de máquina en máquinas cuya palabra
los tamaños eran múltiplos de 3. Necesitaba octal cuando trabajaba con los CDC
6600 mainframe, que tenía un tamaño de palabra de 60 bits. Si pudieras leer
octal, podría considerar una palabra como 20 dígitos. Dos dígitos representados
el código de operación, y un dígito identificó uno de los 8 registros. Durante el
transición lenta de códigos de máquina a lenguajes de alto nivel, era
se cree que es útil para proporcionar formas octales en lenguajes de programación.
En C, una representación extremadamente desafortunada de octalidad fue
seleccionado: inicial cero. Entonces en C, 0100 significa 64, no 100, y 08 es un
error, no 8. Aún más desafortunadamente, este anacronismo ha sido
copiado en casi todos los lenguajes modernos, incluido JavaScript, donde
solo se usa para crear errores. No tiene otro propósito. Entonces en
modo estricto, las formas octales ya no están permitidas.
Etcétera
La pseudo matriz de argumentos se vuelve un poco más
como una matriz en ES5. En modo estricto, pierde a quien llama y a quien llama
propiedades. Esto hace posible pasar sus argumentos a personas que no sean de confianza.
código sin renunciar a mucho contexto confidencial. También el
Se elimina la propiedad de argumentos de las funciones.
En modo estricto, las claves duplicadas en una función literal producirán una
error de sintaxis. Una función no puede tener dos parámetros con el mismo nombre.
Una función no puede tener una variable con el mismo nombre que una de sus
parámetros. Una función no puede eliminar sus propias variables. Un intento de
eliminar una propiedad no configurable ahora genera una excepción. Primitivo
los valores no se envuelven implícitamente.
Palabras reservadas para futuras versiones de JavaScript
ECMAScript 5 agrega una lista de palabras reservadas. Si los usa como variables o argumentos, el modo estricto arrojará un error. Las palabras reservadas son:
implementa, interfaz, dejar, empaquetar, privado, protegido, público, estático y rendimiento
Otras lecturas
Modo estricto - JavaScript | MDN
Soporte del navegador para modo estricto
Transición al modo estricto
|
Recomiendo encarecidamente a todos los desarrolladores que comiencen a usar el modo estricto ahora. Hay suficientes navegadores compatibles que el modo estricto nos ayudará legítimamente a salvarnos de errores que ni siquiera sabíamos que estaban en su código.
Aparentemente, en la etapa inicial habrá errores que nunca antes habíamos encontrado. Para obtener el beneficio completo, debemos realizar las pruebas adecuadas después de cambiar al modo estricto para asegurarnos de que hemos detectado todo. Definitivamente, no solo incluimos el uso estricto en nuestro código y asumimos que no hay errores. Entonces, la pérdida es que es hora de comenzar a usar esta característica de lenguaje increíblemente útil para escribir mejor código.
Por ejemplo,
var person = {
nombre: 'xyz',
posición: 'abc',
nombre completo: función () {"uso estricto"; return this.name; }
};
JSLint es un depurador escrito por Douglas Crockford. Simplemente pegue su secuencia de comandos y buscará rápidamente problemas y errores notables en su código.
|
Me gustaría ofrecer una respuesta algo más fundamentada que complemente las otras respuestas. Esperaba editar la respuesta más popular, pero fallé. Traté de hacerlo lo más completo y completo que pude.
Puede consultar la documentación de MDN para obtener más información.
"use estricto" una directiva introducida en ECMAScript 5.
Las directivas son similares a las declaraciones, pero diferentes.
use estricto no contiene palabras clave: la directiva es una declaración de expresión simple, que consiste en un literal de cadena especial (entre comillas simples o dobles). Los motores de JavaScript, que no implementan ECMAScript 5, simplemente ven una declaración de expresión sin efectos secundarios. Se espera que las versiones futuras de los estándares ECMAScript introduzcan el uso como una palabra clave real; por tanto, las citas quedarían obsoletas.
use estricto solo se puede usar al comienzo de un script o de una función, es decir, debe preceder a cualquier otra declaración (real). No tiene que ser la primera instrucción en un script de función: puede ir precedida de otras expresiones de declaración que consistan en cadenas literales (y JavaScriptimplementaciones pueden tratarlas como directivas específicas de implementación). Las declaraciones de cadenas literales, que siguen a una primera declaración real (en un script o función) son declaraciones de expresión simples. Los intérpretes no deben interpretarlos como directivas y no tienen ningún efecto.
La directiva de uso estricto indica que el siguiente código (en un script o en una función) es un código estricto.
El código en el nivel más alto de un script (código que no está en una función) se considera código estricto cuando el script contiene una directiva de uso estricto.
El contenido de una función se considera código estricto cuando la función en sí está definida en un código estricto o cuando la función contiene una directiva de uso estricto.
El código que se pasa a un método eval () se considera código estricto cuando se llama a eval () desde un código estricto o contiene la directiva de uso estricto.
El modo estricto de ECMAScript 5 es un subconjunto restringido del lenguaje JavaScript, que elimina los déficits relevantes del lenguaje y presenta una verificación de errores más estricta y una mayor seguridad. A continuación, se enumeran las diferencias entre el modo estricto y el modo normal (de los cuales los tres primeros son particularmente importantes):
No puede usar la instrucción with en modo estricto.
En modo estricto, todas las variables deben declararse: si asigna un valor a un identificador que no ha sido declarado como variable, función, parámetro de función, parámetro de cláusula de captura o propiedad del Objeto global, obtendrá un ReferenceError. En modo normal, el identificador se declara implícitamente como una variable global (como una propiedad del Objeto global)
En modo estricto, la palabra clave this tiene el valor indefinido en funciones que fueron invocadas como funciones (no como métodos). (En modo normal, esto siempre apunta al Objeto global). Esta diferencia se puede utilizar para probar si una implementación admite el modo estricto:
var hasStrictMode = (function () {"usar estricto"; devuelve esto === undefined} ());
Además, cuando se invoca una función con call () o se aplica en modo estricto, este es exactamente el valor del primer argumento de la invocación de call () o apply (). (En el modo normal, null e undefined se reemplazan por el objeto global y los valores, que no son objetos, se convierten en objetos).
En modo estricto, obtendrá un TypeError, cuando intente asignar a propiedades de solo lectura o definir nuevas propiedades para un objeto no extensible. (En modo normal, ambos simplemente fallan sin mensaje de error).
En modo estricto, al pasar código a eval (), no puede declarar o definir variables o funciones en el alcance de la persona que llama (como puede hacerlo en modo normal). En cambio, se crea un nuevo alcance para eval () y las variables y funciones están dentro de ese alcance. Ese alcance se destruye después de que eval () finaliza la ejecución.
En modo estricto, el objeto-argumentos de una función contiene una copia estática de los valores, que se pasan a esa función. En modo normal, el objeto-argumentos tiene un comportamiento algo "mágico": los elementos de la matriz y los parámetros de la función nombrada hacen referencia a ambos al mismo valor.
En modo estricto obtendrá un SyntaxError cuando el operador de eliminación es seguido por un identificador no calificado (una variable, función o parámetro de función). En el modo normal, la expresión de eliminación no haría nada y se evalúa como falsa.
En modo estricto, obtendrá un TypeError cuando intente eliminar una propiedad no configurable. (En el modo normal, el intento simplemente falla y la expresión de eliminación se evalúa como falsa).
En modo estricto, se considera un error sintáctico cuando intenta definir varias propiedades con el mismo nombre para un objeto literal. (En modo normal no hay error).
En modo estricto se considera un error sintáctico cuando la declaración de una función tiene varios parámetros con el mismo nombre. (En modo normal no hay error).
En modo estricto, no se permiten literales octales (estos son literales que comienzan con 0x. (En modo normal, algunas implementaciones permiten literales octales).
En modo estricto, los identificadores eval y los argumentos se tratan como palabras clave. No puede cambiar su valor, no puede asignarles un valor y no puede usarlos como nombres para variables, funciones, parámetros de función o identificadores de un bloque de captura.
En el modo estricto, hay más restricciones sobre las posibilidades de examinar la pila de llamadas. argumentos.caller y argumentos.callee causan un TypeError en una función en modo estricto. Además, algunas propiedades de llamada y argumentos de funciones en modo estricto causan un TypeError cuando intenta leerlas.
|
Mis dos centavos:
Uno de los objetivos del modo estricto es permitir una depuración más rápida de los problemas. Ayuda a los desarrolladores lanzando una excepción cuando ocurren ciertas cosas incorrectas que pueden causar un comportamiento silencioso y extraño de su página web. En el momento en que usemos use estricto, el código arrojará errores que ayudarán al desarrollador a solucionarlo por adelantado.
Algunas cosas importantes que he aprendido después de usar el uso estricto:
Evita la declaración de variable global:
var tree1Data= {nombre: 'Banana Tree', edad: 100, leafCount: 100000};
árbol de funciones (typeOfTree) {
var age;
var leafCount;
age = typeOfTree.age;
leafCount = typeOfTree.leafCount;
nameoftree = typeOfTree.name;
};
var tree1 = nuevo árbol (tree1Data);
console.log (ventana);
Ahora, este código crea nameoftree en el alcance global al que se puede acceder usando window.nameoftree. Cuando implementamos el uso estricto, el código arrojaría un error.
Error de referencia no detectado: nameoftree no está definido
Muestra
Elimina con declaración:
con declaraciones no se pueden minimizar con herramientas como uglify-js. También están obsoletos y se eliminaron de futuras versiones de JavaScript.
Muestra
Evita los duplicados:
Cuando tenemos una propiedad duplicada, lanza una excepción
Error de sintaxis no detectado: propiedad de datos duplicados en el literal de objeto no
permitido en modo estricto
"uso estricto";
var tree1Data = {
nombre: 'Banana Tree',
edad: 100,
leafCount: 100000,
nombre: 'Banana Tree'
};
Hay algunos más, pero necesito adquirir más conocimientos al respecto.
|
Si utiliza un navegador lanzado en el último año, lo más probable es que admita el modo estricto de JavaScript. Solo los navegadores más antiguos antes de que ECMAScript 5 se convirtiera en el estándar actual no lo admiten.
Las comillas alrededor del comando aseguran que el código también funcionará en los navegadores más antiguos (aunque las cosas que generan un error de sintaxis en el modo estricto generalmente solo harán que el script funcione mal de alguna manera difícil de detectar en esos navegadores más antiguos).
|
Al agregar "use estricto";, los siguientes casos arrojarán un SyntaxError antes de que se ejecute el script:
Allanando el camino para futuras versiones de ECMAScript, usando una de las palabras clave recientemente reservadas (en previsión de ECMAScript 6): implements, interface, let, package, private, protected, public, static y yield.
Declaración de función en bloques
si (a : 3: 15)
en : 6: 5
Aquí, el compilador arroja el error de referencia. En modo estricto, el compilador no nos permite usar la variable sin declararla. Así se pueden prevenir las pérdidas de memoria. Además, podemos escribir código más optimizado.
|
El modo estricto elimina los errores que se ignorarían en el modo no estricto, lo que hace que JavaScript sea "más seguro".
¿Se considera una de las mejores prácticas?
Sí, se considera parte de las mejores prácticas al trabajar con javascript para incluir el modo estricto. Esto se hace agregando la siguiente línea de código en su archivo JS.
'uso estricto';
en su código.
¿Qué significa para los agentes de usuario?
La indicación de que el código debe interpretarse en modo estricto especifica a los agentes de usuario, como los navegadores, que deben tratar el código literalmente como está escrito y generar un error si el código no tiene sentido.
Por ejemplo: considere que en su archivo .js tiene el siguiente código:
Escenario 1: [SIN MODO ESTRICTO]
var city = "Chicago"
console.log (ciudad) // Imprime el nombre de la ciudad, es decir, Chicago
Escenario 2: [SIN MODO ESTRICTO]
ciudad = "Chicago"
console.log (ciudad) // Imprime el nombre de la ciudad, es decir, Chicago
Entonces, ¿por qué se imprime el nombre de la variable en ambos casos?
Sin el modo estricto activado, los agentes de usuario a menudo pasan por una serie de modificaciones en el código problemático en un intento de que tenga sentido. En la superficie, esto puede parecer algo bueno y, de hecho, trabajar fuera del modo estricto hace posible que las personas se mojen los pies con el código JavaScript sin tener todos los detalles bien definidos. Sin embargo, como desarrollador, no quiero dejar un error en mi código, porque sé que podría volver y morderme más adelante, y también solo quiero escribir un buen código. Y ahí es donde el modo estricto ayuda.
Escenario 3: [MODO ESTRICTO]
'uso estricto';
ciudad = "Chicago"
console.log (ciudad) // Error de referencia: la asignación es una variable ciudad no declarada.
Consejo adicional: para mantener la calidad del código usando el modo estricto, no necesita escribir esto una y otra vez, especialmente si tiene varios archivos .js. Puede hacer cumplir esta regla globalmente en las reglas de eslint de la siguiente manera:
Nombre de archivo: .eslintrc.js
module.exports = {
env: {
es6: cierto
},
reglas : {
estricto: ['error', 'global'],
},
};
Bien, entonces, ¿qué se previene en modo estricto?
Usar una variable sin declararla arrojará un error en modo estricto. Esto es para evitar la creación involuntaria de variables globales en toda su aplicación. El ejemplo de la imprenta Chicago cubre esto en particular.
Eliminar una variable, una función o un argumento es un no-no en modo estricto.
"uso estricto";
función x (p1, p2) {};
eliminar x; // Esto provocará un error
No se permite duplicar el nombre de un parámetro en modo estricto.
"uso estricto";
función x (p1, p1) {}; // Esto provocará un error
Las palabras reservadas en el lenguaje Javascript no están permitidas en modo estricto. Las palabras son interfaz de implementos, dejar, paquetes, privado, protegido, público. estático y rendimiento
Para obtener una lista más completa, consulte la documentación de MDN aquí: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode
|
Pregunta muy activa. Gana 10 de reputación para responder a esta pregunta. El requisito de reputación ayuda a proteger esta pregunta del spam y de la actividad sin respuesta.
No es la respuesta que estás buscando? Examine otras preguntas etiquetadas sintaxis javascript jslint use-estricto o haga su propia pregunta.